#pragma once

#include <utils/Concepts.h>

// Base header for calculating distance between two geometry objects

namespace solar
{
    template <typename T1, typename T2> auto distance(T1*, T2*) -> double
    {
        static_assert(false, "Don't use this generic **unimplemented** version, include the "
                             "corresponding header for detailed implementation");
    }

    template <typename T1, typename T2>
    auto distance(T1* src, T2* dst) -> double
        requires(ClassWithDistanceTo<T1, T2>)
    {
        return src->distanceTo(dst);
    }

} // namespace solar
